package com.nio;

import javax.annotation.processing.Processor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class NioSelectorServerThread {

    /**
     * reactor模型(基于事件响应)，增加线程组增加nio并发量
     * 可参考文档ScalableIOinjava
     * @param args
     */

    public static void main(String[] args) {
        new NioSelectorServerThread().nioSelectorServerThread();
    }

    public void nioSelectorServerThread() {

        // TODO 四种线程池后续研究
        // 核心线程、非核心线程、队列，提交优先级，运行优先级
        // newFixedThreadPool 创建一个定长的线程池，超多的线程会在队列中等待（此处为无界队列可能导致oom）
        // newSingleThreadExecutor 创建一个单线程化的线程，只会用唯一的工作线程执行任务保证顺序，似乎一定情况下会变成单线程（此处为无界队列可能导致oom）
        // newScheduledThreadPool 创建定长线程池，支持周期性执行任务
        // newCachedThreadPool 创建一个可以缓存的线程池，若线程池长度超过，可以灵活回收空闲线程，无空闲线程回收则创建，可能会占满cpu
        // 推荐使用ThreadPoolExecutor(核心线程数，最大线程数，时间，时间单位，队列，线程工厂，拒绝策略)

        ExecutorService mainSelectorThreadPool = Executors.newFixedThreadPool(1);// 创建主线程
        ExecutorService SelectorThreadPool = Executors.newFixedThreadPool(8);// 创建处理读取channel线程

        // TODO 尝试编写

        // 思路：创建主线程存放接收注册连接selector
        // 创建数据处理线程组用于处理感知事物的channel

    }


}
